#ifndef HEXWIDGET_H
#define HEXWIDGET_H

#include <QAbstractScrollArea>

class HexWidget : public QAbstractScrollArea
{
    Q_OBJECT

signals:
    void onSelect(qint64 pos);

public:
    HexWidget(QWidget *parent);
    ~HexWidget();

    void setData(const QByteArray &data);
    void setSelect(qint64 pos, int len);
    QByteArray getSelectData();
    qint64 findBytes(const QByteArray &data, bool next);

protected:
    // Handle events
    QSize sizeHint() const;
    void mousePressEvent(QMouseEvent * event);
    void paintEvent(QPaintEvent *event);
    void resizeEvent(QResizeEvent *);
    void changeEvent(QEvent *event);

private:
    void init();
    // Ensure the cursor to be visbile
    void ensureSelectVisible();

private:
    QByteArray m_data;
    qint64 m_size;
    qint64 m_selectPosition;
    int m_selectSize;

    int m_descent;
    int m_ascent;
    int m_lineHeight; // 每行高度
    int m_charWidth; // 每个字符的宽度
    int m_margin; // 16进制字节间隔离宽度
    int m_columnWidth; // 每个16进制字节的宽度
    int m_labelWidth; // 地址信息宽度
    int m_HexWidth; // 16进制显示宽度
    int m_textWidth; // 文本信息宽度
    int m_bytesPerLine; // 每行显示字节数
    int m_addressBytes; // 地址信息字节数
    qint64 m_numLines; // 总行数
    qint64 m_numVisibleLines; // 页面内可显示的行数
};

#endif // HEXWIDGET_H
